//package com.t2tierp.pafecf.controller;
//
//import br.com.classes.NfeCabecalho;
//import br.com.classes.NfeDetalhe;
//import br.com.nfe.CalculaImposto;
//import br.com.util.JPAUtil;
//import com.t2tierp.pafecf.bd.AcessoBanco;
//import com.t2tierp.pafecf.infra.Biblioteca;
//import com.t2tierp.pafecf.vo.*;
//import java.math.BigDecimal;
//import java.sql.*;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//import java.util.logging.Level;
//import java.util.logging.Logger;
//import javax.persistence.EntityManager;
//import javax.persistence.Query;
//import javax.swing.JOptionPane;
//
//public class NotaFiscalController {
//
//    String consultaSQL;
//    Statement stm;
//    PreparedStatement pstm;
//    ResultSet rs;
//
//    //TODO : Alterar retornoNfeCabecalho
//    public NfeCabecalho retornaNfeCabecalho(Integer idNfeCabecalho) {
//        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
//        Query q = em.createNamedQuery("FROM NfeCabecalho c WHERE c.id = ?");
//        q.setParameter(1, idNfeCabecalho);
//        NfeCabecalho retorno;
//        try {
//            retorno = (NfeCabecalho) q.getSingleResult();
//            em.close();
//            return retorno;
//        } catch (javax.persistence.NoResultException e) {
//            em.close();
//            return null;
//        }
//    }
//
////    public List<NfeCabecalho> tabelaNF2Detalhe(Integer pId) {
////        try {
////            stm = bd.conectar().createStatement();
////            rs = stm.executeQuery("select count(*) as TOTAL from NF2_DETALHE where ID_NF2_CABECALHO=" + pId);
////            rs.first();
////            Integer totalRegistros = rs.getInt("TOTAL");
////
////            if (totalRegistros > 0) {
////                List<NfeCabecalho> listaNF2Detalhe = new ArrayList<NfeCabecalho>();
////                consultaSQL = "select * from NF2_DETALHE where ID_NF2_CABECALHO=" + pId;
////
////                stm = bd.conectar().createStatement();
////                rs = stm.executeQuery(consultaSQL);
////                rs.beforeFirst();
////                while (rs.next()) {
////                    NfeCabecalho NF2Detalhe = new NfeCabecalho();
////                    NF2Detalhe.setId(rs.getInt("ID"));
////                    NF2Detalhe.setCfop(rs.getInt("CFOP"));
////                    NF2Detalhe.setIdProduto(rs.getInt("ID_PRODUTO"));
////                    NF2Detalhe.setIdNF2Cabecalho(rs.getInt("ID_NF2_CABECALHO"));
////                    NF2Detalhe.setItem(rs.getInt("ITEM"));
////                    NF2Detalhe.setQuantidade(rs.getDouble("QUANTIDADE"));
////                    NF2Detalhe.setValorUnitario(rs.getDouble("VALOR_UNITARIO"));
////                    NF2Detalhe.setValorTotal(rs.getDouble("VALOR_TOTAL"));
////                    NF2Detalhe.setBaseICMS(rs.getDouble("BASE_ICMS"));
////                    NF2Detalhe.setTaxaICMS(rs.getDouble("TAXA_ICMS"));
////                    NF2Detalhe.setICMS(rs.getDouble("ICMS"));
////                    NF2Detalhe.setICMSOutras(rs.getDouble("ICMS_OUTRAS"));
////                    NF2Detalhe.setICMSIsento(rs.getDouble("ICMS_ISENTO"));
////                    NF2Detalhe.setTaxaDesconto(rs.getDouble("TAXA_DESCONTO"));
////                    NF2Detalhe.setDesconto(rs.getDouble("DESCONTO"));
////                    NF2Detalhe.setTaxaISSQN(rs.getDouble("TAXA_ISSQN"));
////                    NF2Detalhe.setISSQN(rs.getDouble("ISSQN"));
////                    NF2Detalhe.setTaxaPIS(rs.getDouble("TAXA_PIS"));
////                    NF2Detalhe.setPIS(rs.getDouble("PIS"));
////                    NF2Detalhe.setTaxaCOFINS(rs.getDouble("TAXA_COFINS"));
////                    NF2Detalhe.setCOFINS(rs.getDouble("COFINS"));
////                    NF2Detalhe.setTaxaAcrescimo(rs.getDouble("TAXA_ACRESCIMO"));
////                    NF2Detalhe.setAcrescimo(rs.getDouble("ACRESCIMO"));
////                    NF2Detalhe.setTaxaIPI(rs.getDouble("TAXA_IPI"));
////                    NF2Detalhe.setIPI(rs.getDouble("IPI"));
////                    NF2Detalhe.setCancelado(rs.getString("CANCELADO"));
////                    NF2Detalhe.setMovimentaEstoque(rs.getString("MOVIMENTA_ESTOQUE"));
////                    listaNF2Detalhe.add(NF2Detalhe);
////                }
////                return listaNF2Detalhe;
////            } else {
////                //caso nao existam registros retorna nulo
////                return null;
////            }
////        } catch (Exception e) {
////            e.printStackTrace();
////            return null;
////        } finally {
////            bd.desconectar();
////        }
////    }
//    public Integer gravaNota(VendaCabecalhoVO vendaCabecalho, List<VendaDetalheVO> listaNotaDetalhe) {
////         CalculaImposto.efetuaCalculosDetalhe(vendaCabecalho, empresa.getCrt(), true, nfe);
//
//        NfeCabecalho nfeCab = new NfeCabecalho();
//        ClienteController cliControl = new ClienteController();
//        VendaCabecalhoVO venda = new VendaCabecalhoVO();
//        venda.setId(vendaCabecalho.getId());
//
//        //dados da venda
//        nfeCab.setCliente(cliControl.consultaPorId(vendaCabecalho.getIdCliente()));
//        try {
//            nfeCab.setNumero(retornaUltimoNumeroNota());
//        } catch (SQLException ex) {
//            Logger.getLogger(NotaFiscalController.class.getName()).log(Level.SEVERE, null, ex);
//        }
//        nfeCab.setDataEmissao(new java.sql.Date(vendaCabecalho.getDataVenda().getTime()));
//        nfeCab.setHoraEntradaSaida(vendaCabecalho.getHoraVenda());
//        nfeCab.setSerie("01");
//        nfeCab.setCodigoModelo("55");
//        nfeCab.setValorTotalProdutos(new BigDecimal(vendaCabecalho.getTotalProdutos()));
//        nfeCab.setValorIcms(new BigDecimal(vendaCabecalho.getICMS()));
//        nfeCab.setValorIssqn(new BigDecimal(vendaCabecalho.getISSQN()));
//        nfeCab.setValorPis(new BigDecimal(vendaCabecalho.getPIS()));
//        nfeCab.setValorCofins(new BigDecimal(vendaCabecalho.getCOFINS()));
//        nfeCab.setValorDesconto(new BigDecimal(vendaCabecalho.getDesconto()));
//        nfeCab.setTipoEmissao("A");
//        nfeCab.setVenda(venda);
//        nfeCab.setIndicadorFormaPagamento("0");
//        nfeCab.setDataEntradaSaida(new java.sql.Date(vendaCabecalho.getDataVenda().getTime()));
//        nfeCab.setVersaoProcessoEmissao(100);
//        nfeCab.setFinalidadeEmissao("1");
//        nfeCab.setTipoOperacao("1");
//        nfeCab.setFormatoImpressaoDanfe("1");
//        nfeCab.setCodigoNumerico("00000001");
//        nfeCab.setValorFrete(BigDecimal.ZERO);
//        nfeCab.setValorSeguro(BigDecimal.ZERO);
//        nfeCab.setValorIpi(BigDecimal.ZERO);
//        nfeCab.setValorDespesasAcessorias(BigDecimal.ZERO);
//        nfeCab.setBaseCalculoIcmsSt(BigDecimal.ZERO);
//        nfeCab.setValorIcmsSt(BigDecimal.ZERO);
//
//
//        EmpresaController empresaControl = new EmpresaController();
//        EmpresaVO empresa = empresaControl.pegaEmpresa(1);
//        SimpleDateFormat formatoData = new SimpleDateFormat("yyMM");
//        String chave = empresa.getCodigoMunicipioIBGE().toString().substring(0, 2) //  2
//                + formatoData.format(new Date()) //  4 
//                + empresa.getCNPJ() // 14 
//                + nfeCab.getCodigoModelo()//nmodelo                      //  2
//                + nfeCab.getSerie()//serie nota                          //  3 
//                + nfeCab.getNumero()//numero                             //  9
//                + "1" //  1 
//                + nfeCab.getCodigoNumerico();//codigo numero             //  8
//        Integer digitaChave = Biblioteca.modulo11(chave);             //  1
//
//        nfeCab.setChaveAcesso(chave + digitaChave.toString());
//        nfeCab.setDigitoChaveAcesso(digitaChave.toString());
//
//        Connection con = bd.conectar();
//        Integer idNovaNota = null;
//        try {
//            consultaSQL = "select max(ID) as ID from NFE_CABECALHO ";
//            pstm = con.prepareStatement(consultaSQL);
//            rs = pstm.executeQuery();
//
//            if (rs.first()) {
//                idNovaNota = (rs.getInt("ID") + 1);
//            }
//        } catch (Exception e) {
//            JOptionPane.showMessageDialog(null, "Erro ao retornar ultimo numero da nota!!");
//        }
//        //itens da venda
//        NotaFiscalController nfeControl = new NotaFiscalController();
//        ProdutoController produtoControl = new ProdutoController();
//
////        NfeCabecalho nfeCabec = new NfeCabecalho();
////        nfeCabec.setId(1);
//
//        for (VendaDetalheVO v : listaNotaDetalhe) {
//
//            ProdutoVO produto = produtoControl.consultaId(v.getIdProduto());
//
//
//            NfeDetalhe nfe_det = new NfeDetalhe();
//            nfe_det.setProduto(produto);
//            nfe_det.setNomeProduto(produto.getDescricao());
//            nfe_det.setNcm(produto.getNCM());
//            nfe_det.setValorBrutoProdutos(new BigDecimal(v.getValorTotal()));
//            nfe_det.setQuantidadeComercial(new BigDecimal(v.getQuantidade()));
//            nfe_det.setValorUnitarioComercial(new BigDecimal(v.getValorUnitario()));
//            nfe_det.setValorTotal(new BigDecimal(v.getValorTotal()));
//            nfe_det.setAliquotaIcms(new BigDecimal(produto.getTaxaICMS()));
//            nfe_det.setCfop(v.getCfop());
//            nfe_det.setCsosn("0" + v.getCST());
//            nfe_det.setCstIcms(v.getCST());
////              nfe_det.setCstCofins(v.getCst());
////              nfe_det.setCstIcms(v.getCst());
////              nfe_det.setCstIpi(v.getCst());
//            nfe_det.setGtin(produto.getGTIN());
////              nfe_det.setGtinUnidadeTributavel(v.getProduto().getIdUnidadeProduto().getNome());
//            nfe_det.setNumeroItem(v.getItem());
//            nfe_det.setBaseCalculoIcms(new BigDecimal(v.getBaseICMS()));
//            nfe_det.setValorIcms(new BigDecimal(v.getICMS()));
//            nfe_det.setValorDesconto(new BigDecimal(v.getDesconto()));
//            nfe_det.setValorIssqn(new BigDecimal(v.getISSQN()));
//            nfe_det.setValorPis(new BigDecimal(v.getPIS()));
//            nfe_det.setValorCofins(new BigDecimal(v.getCOFINS()));
//            nfe_det.setValorIpi(new BigDecimal(v.getPIS()));
//            nfe_det.setIdNfeCabecalho(new NfeCabecalho());
//            nfe_det.setQuantidadeTributavel(new BigDecimal(v.getQuantidade()));
//            nfe_det.setValorUnitarioTributacao(new BigDecimal(v.getValorUnitario()));
//
//            nfeCab.getNfeDetalheList().add(nfe_det);
//        }
//
//        nfeCab = CalculaImposto.efetuaCalculosDetalhe(nfeCab.getNfeDetalheList(), Integer.parseInt(empresa.getCrt()), true, nfeCab);
//        try {
//            consultaSQL = "insert into NFE_CABECALHO ("
//                    + "ID_CLIENTE,"
//                    + "NUMERO,"
//                    + "DATA_EMISSAO,"
//                    + "HORA_ENTRADA_SAIDA,"
//                    + "SERIE,"
//                    + "VALOR_TOTAL_PRODUTOS,"
//                    + "VALOR_ICMS,"
//                    + "VALOR_ISSQN,"
//                    + "VALOR_PIS,"
//                    + "VALOR_COFINS,"
//                    + "VALOR_IPI,"
//                    + "VALOR_DESCONTO,"
//                    + "TIPO_EMISSAO,"
//                    + "ID_VENDA_CABECALHO,"
//                    + "CHAVE_ACESSO,"
//                    + "DIGITO_CHAVE_ACESSO,"
//                    + "INDICADOR_FORMA_PAGAMENTO,"
//                    + "CODIGO_MODELO,"
//                    + "DATA_ENTRADA_SAIDA,"
//                    + "VERSAO_PROCESSO_EMISSAO,"
//                    + "FINALIDADE_EMISSAO,"
//                    + "TIPO_OPERACAO,"
//                    + "FORMATO_IMPRESSAO_DANFE) "
//                    + "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
//
//
//            pstm = con.prepareStatement(consultaSQL);
//            pstm.setInt(1, nfeCab.getCliente().getId());
//            pstm.setString(2, "001");
//            pstm.setDate(3, new java.sql.Date(nfeCab.getDataEmissao().getTime()));
//            pstm.setString(4, nfeCab.getHoraEntradaSaida());
//            pstm.setString(5, "00");
//            pstm.setBigDecimal(6, nfeCab.getValorTotalProdutos());
//            pstm.setBigDecimal(7, nfeCab.getValorIcms());
//            pstm.setBigDecimal(8, nfeCab.getValorIssqn());
//            pstm.setBigDecimal(9, nfeCab.getValorPis());
//            pstm.setBigDecimal(10, nfeCab.getValorCofins());
//            pstm.setBigDecimal(11, new BigDecimal(0));
//            pstm.setBigDecimal(12, nfeCab.getValorDesconto());
//            pstm.setString(13, "A");//TIPO EMISSAO
//            pstm.setInt(14, nfeCab.getId());//TIPO EMISSAO
//            pstm.setString(15, chave);
//            pstm.setInt(16, digitaChave);
//            pstm.setString(17, "0");
//            pstm.setString(18, "55");
//            pstm.setDate(19, new java.sql.Date(nfeCab.getDataEmissao().getTime()));
//            pstm.setInt(20, 100);
//            pstm.setString(21, "1");
//            pstm.setString(22, "1");
//            pstm.setString(23, "1");
//            pstm.executeUpdate();
//
//            consultaSQL = "insert into NFE_DETALHE ("
//                    + "ID_NFE_CABECALHO,"
//                    + "ID_PRODUTO,"
//                    + "CFOP,"
//                    + "NUMERO_ITEM,"
//                    + "QUANTIDADE_COMERCIAL,"
//                    + "VALOR_UNITARIO_COMERCIAL,"
//                    + "VALOR_TOTAL,"
//                    + "BASE_CALCULO_ICMS,"
//                    + "VALOR_ICMS,"
//                    + "VALOR_DESCONTO,"
//                    + "VALOR_ISSQN,"
//                    + "VALOR_PIS,"
//                    + "VALOR_COFINS,"
//                    + "VALOR_IPI,"
//                    + "QUANTIDADE_TRIBUTAVEL,"
//                    + "VALOR_UNITARIO_TRIBUTACAO,"
//                    + "CST_ICMS,"
//                    + "ORIGEM_MERCADORIA,"
//                    + "MODALIDADE_BC_ICMS,"
//                    + "ALIQUOTA_ICMS,"
//                    + "VALOR_BASE_CALCULO_PIS)"
//                    + "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
//            for (NfeDetalhe nfe : nfeCab.getNfeDetalheList()) {
//                pstm = con.prepareStatement(consultaSQL);
//                pstm.setInt(1, nfe.getIdNfeCabecalho().getId());
//                pstm.setInt(2, nfe.getProduto().getId());
//                pstm.setInt(3, nfe.getCfop());
//                pstm.setInt(4, nfe.getNumeroItem());
//                pstm.setBigDecimal(5, nfe.getQuantidadeComercial());
//                pstm.setBigDecimal(6, nfe.getValorUnitarioComercial());
//                pstm.setBigDecimal(7, nfe.getValorTotal());
//                pstm.setBigDecimal(8, nfe.getBaseCalculoIcms());
//                pstm.setBigDecimal(9, nfe.getValorIcms());
//                pstm.setBigDecimal(10, nfe.getValorDesconto());
//                pstm.setBigDecimal(11, nfe.getValorIssqn());
//                pstm.setBigDecimal(12, nfe.getValorPis());
//                pstm.setBigDecimal(13, nfe.getValorCofins());
//                pstm.setDouble(14, 0);
//                pstm.setBigDecimal(15, BigDecimal.ZERO);
//                pstm.setBigDecimal(16, nfe.getValorUnitarioComercial());
//                pstm.setString(17, "000");
//                pstm.setString(18, "0");
//                pstm.setString(19, "3");
//                pstm.setDouble(20, 07D);
//                pstm.setDouble(21, 07D);
//                JOptionPane.showMessageDialog(null, "valor manualmente: Classe--> NotaFiscalController");
////                pstm.setDouble(15, Double.parseDouble(notaDetalhe.getEcfIcmsSt()));
//
//                pstm.executeUpdate();
//            }
//
//            return idNovaNota;//retornando o id da Nota fiscal cadastrada
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            try {
//                con.rollback();
//            } catch (SQLException ex) {
//                ex.printStackTrace();
//            }
//            return null;
//        } finally {
//            bd.desconectar();
//        }
//    }
//
//    public NotaFiscalCabecalhoVO consultaNota(String numeroNota) {
//        try {
//            consultaSQL = "select * from NOTA_FISCAL_CABECALHO where NUMERO = ?";
//            pstm = bd.conectar().prepareStatement(consultaSQL);
//            pstm.setString(1, numeroNota);
//            rs = pstm.executeQuery();
//            if (rs.first()) {
//                NotaFiscalCabecalhoVO notaCabecalho = new NotaFiscalCabecalhoVO();
//                notaCabecalho.setId(rs.getInt("ID"));
//                notaCabecalho.setNumero(rs.getString("NUMERO"));
//                return notaCabecalho;
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            bd.desconectar();
//        }
//        return null;
//    }
//
//    public List<NfeDetalhe> retornaNfeDetalhe(Integer id) {
//        try {
//            consultaSQL = "SELECT * FROM nfe_detalhe where ID_NFE_CABECALHO = " + id;
//            stm = bd.conectar().createStatement();
//            rs = stm.executeQuery(consultaSQL);
//            rs.beforeFirst();
//            NfeDetalhe nfe_det = new NfeDetalhe();
//            ProdutoVO produto = new ProdutoVO();
//            nfe_det.setProduto(produto);
//
//            List<NfeDetalhe> listNfe_det = new ArrayList<NfeDetalhe>();
//            while (rs.next()) {
//                nfe_det.setId(rs.getInt("ID"));
//                nfe_det.setNumeroItem(rs.getInt("NUMERO_ITEM"));
//                nfe_det.setNomeProduto(rs.getString("NOME_PRODUTO"));
//                nfe_det.setNcm(rs.getString("NCM"));
//                nfe_det.setGtin(rs.getString("GTIN"));
//                nfe_det.setExTipi(rs.getInt("EX_TIPI"));
//                nfe_det.setCfop(rs.getInt("CFOP"));
//                nfe_det.setUnidadeComercial(rs.getString("UNIDADE_COMERCIAL"));
//                nfe_det.setQuantidadeComercial(rs.getBigDecimal("QUANTIDADE_COMERCIAL"));
//                nfe_det.setValorUnitarioComercial(rs.getBigDecimal("VALOR_UNITARIO_COMERCIAL"));
//                nfe_det.setValorBrutoProdutos(rs.getBigDecimal("VALOR_BRUTO_PRODUTOS"));
//                nfe_det.setGtinUnidadeTributavel(rs.getString("GTIN_UNIDADE_TRIBUTAVEL"));
//                nfe_det.setUnidadeTributavel(rs.getString("UNIDADE_TRIBUTAVEL"));
//                nfe_det.setQuantidadeTributavel(rs.getBigDecimal("QUANTIDADE_TRIBUTAVEL"));
//                nfe_det.setValorUnitarioTributacao(rs.getBigDecimal("VALOR_UNITARIO_TRIBUTACAO"));
//                nfe_det.setValorFrete(rs.getBigDecimal("VALOR_FRETE"));
//                nfe_det.setValorSeguro(rs.getBigDecimal("VALOR_SEGURO"));
//                nfe_det.setValorDesconto(rs.getBigDecimal("VALOR_DESCONTO"));
//                nfe_det.setCstIcms(rs.getString("CST_ICMS"));
//                nfe_det.setCsosn(rs.getString("CSOSN"));
//                nfe_det.setBaseCalculoIcms(rs.getBigDecimal("BASE_CALCULO_ICMS"));
//                nfe_det.setAliquotaIcms(rs.getBigDecimal("ALIQUOTA_ICMS"));
//                nfe_det.setValorIcms(rs.getBigDecimal("VALOR_ICMS"));
//                nfe_det.setAliquotaIcmsSt(rs.getBigDecimal("ALIQUOTA_ICMS_ST"));
//                nfe_det.setValorIcmsSt(rs.getBigDecimal("VALOR_ICMS_ST"));
//                nfe_det.setCstIpi(rs.getString("CST_IPI"));
//                nfe_det.setValorTotal(rs.getBigDecimal("VALOR_TOTAL"));
//                nfe_det.setQuantidadeTributavel(rs.getBigDecimal("QUANTIDADE_TRIBUTAVEL"));
//                nfe_det.setValorUnitarioTributacao(rs.getBigDecimal("VALOR_UNITARIO_TRIBUTACAO"));
//                nfe_det.setCstIcms(rs.getString("CST_ICMS"));
//                nfe_det.setOrigemMercadoria(rs.getString("ORIGEM_MERCADORIA"));
//                nfe_det.setModalidadeBcIcms(rs.getString("MODALIDADE_BC_ICMS"));
//                nfe_det.setValorBaseCalculoPis(rs.getBigDecimal("VALOR_BASE_CALCULO_PIS"));
//                nfe_det.setValorPis(rs.getBigDecimal("VALOR_PIS"));
//
//                produto.setId(rs.getInt("ID_PRODUTO"));
//
//
//                listNfe_det.add(nfe_det);
//            }
//            return listNfe_det;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//    }
//
//    public String retornaUltimoNumeroNota() throws SQLException {
//        consultaSQL = "SELECT n.numero FROM nfe_cabecalho n WHERE n.id in (select max(nf.id) FROM nfe_cabecalho nf)";
//        String num;
//        try {
//            stm = bd.conectar().createStatement();
//            rs = stm.executeQuery(consultaSQL);
//            rs.beforeFirst();
//            if (rs.next()) {
//                num = rs.getString("n.numero");
//                Integer incr = Integer.parseInt(num) + 1;
//                num = incr.toString();
//                return Biblioteca.repete("0", 9 - num.toString().length()) + num;
//            }
//
//        } catch (javax.persistence.NoResultException e) {
//            return "000000001";
//        } finally {
//            bd.desconectar();
//        }
//        return null;
//    }
//}
